﻿//<my-matriculator - a simple tool for registering racers in a USAC cyclocross race>
//Copyright (C) <2011>  <Steven Rivers>

//This program is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.

//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.

//You should have received a copy of the GNU General Public License
//along with this program.  If not, see <http://www.gnu.org/licenses/>.

using System;
using System.Diagnostics;
using System.Windows;
using Registration.Model;
using Registration.Model.Entities;

namespace Registration
{
    /// <summary>
    /// Interaction logic for EditEntry.xaml
    /// </summary>
    public partial class EditEntry 
    {
        public string CategorySnapshot { get; set; }

        public Entry Entryforedit { get; set; }

        public EditEntry(Entry edit)
        {
            InitializeComponent();
            Entryforedit = edit;
            CategorySnapshot = edit.CategoryName;
            gridRiderDetails.DataContext = Entryforedit;
            cmbField.ItemsSource = FieldsDb.GetAllCategories();
        }

        private void OnComboChanged(object sender, EventArgs e)
        {
            var cat = (Category)cmbField.SelectedItem;
            if (cat == null) return;
            if (CategorySnapshot == cat.CategoryName) return;

            if (MessageBoxResult.Yes != MessageBox.Show("Change Bib Number?", "Confirm", MessageBoxButton.YesNo))
                return;
            if (MessageBoxResult.OK == MessageBox.Show("Old bib must not be reused!", "Confirm", MessageBoxButton.OKCancel))
            {
                txtBib.Text = FieldsDb.PreviewNextBib(cat.CategoryId).ToString();
            }
            else
            {
                cmbField.Text = CategorySnapshot;
            }
        }

        private void OnUpdateClick(object sender, RoutedEventArgs e)
        {
            int bib;
            Int32.TryParse(txtBib.Text, out bib);

            Entry found = EntryDb.FindEntryByBib(bib, FieldsDb.GetCategory(Entryforedit.Category).CategoryField);

            var newcat = (Category)cmbField.SelectedItem;

            if (found == null || found.EntryId == Entryforedit.EntryId)
            {   
                if (Entryforedit.Bib != bib)
                {
                    var f = FieldsDb.GetFieldUpdateBib(newcat.CategoryField);
                    Debug.Assert(bib == f.NextBib);
                }
                Entryforedit.Bib = bib;
                EntryDb.UpdateEntry(Entryforedit);
                Close();
            }
            else 
            {
                MessageBox.Show("Duplicate Bib?!", "Error");
            }
        }
    }
}
